<?php
class Autoevaluacion_PreguntasController extends Zend_Controller_Action {
    private $nav;
    private $infoLista;
    private $infoSeccion;
    private $titulo_nombre = "Pregunta :";
    private $titulo_tabs = array("Preguntas asignadas", "Banco de preguntas");

    public function init() {
        parent::init();
        $sesionListas = new Zend_Session_Namespace("LISTAS");
        $this->infoLista = $sesionListas->infoLista;
        $this->infoSeccion = $sesionListas->infoSeccion;
        if(empty($this->infoLista) || empty($this->infoSeccion)) {
            $this->_helper->redirector("ilegal", "error", "default");
        }
        $this->view->infoLista = $this->infoLista;
        $this->view->infoSeccion = $this->infoSeccion;
        //Zend_Debug::dump($this->infoSeccion);
        $this->nav = new App_Util_Navegacion();
        $titulo_secciones="";
        $titulo_elementos="Gestor de preguntas de sección";
        //Zend_Debug::dump($this->infoLista["tipolista"]);
        if($this->infoLista["tipolista"] == "C") {
            $this->nav->agregar_navegacion("Listas de encuestas", "/autoevaluacion/completitud/index");
            $titulo_secciones = "Secciones";
        } elseif($this->infoLista["tipolista"] == "F") {
             if (App_User::getCodigoPadreRol()==Roles_Model_Roles::CODPADRE_SEDE){
                $params=App_Util_SafeUrl::encriptar(array("codproceso"=>$this->infoLista["codproceso"]),true);
                 $this->nav->agregar_navegacion("Datos del comité", "/solicitudes/index/autoevaluacion/{$params}");
            }elseif(App_User::getCodigoPadreRol()==Roles_Model_Roles::CODPADRE_PAR){
                $params=App_Util_SafeUrl::encriptar(array("codproceso"=>$this->infoLista["codproceso"],"tipotexto"=>6),true);
                $this->nav->agregar_navegacion("Informe pares", "/solicitudes/informepares/ponderacion/{$params}");
            }else{
                $this->nav->agregar_navegacion("Listas de factores", "/autoevaluacion/listasfactores/index");
            }
            
//            $this->nav->agregar_navegacion("Listas de factores", "/autoevaluacion/factores/index");
            $titulo_secciones = "Factores de la lista";
            $titulo_elementos="Gestor de características del factor";
        }
        $this->nav->agregar_navegacion("{$titulo_secciones} :: {$this->infoLista["nombre"]}");
        $this->nav->modificar_navegacion("{$titulo_secciones} :: {$this->infoLista["nombre"]}", "/autoevaluacion/secciones/index");
        $this->nav->agregar_navegacion("{$titulo_elementos} :: {$this->infoSeccion["nombre"]}");

        $this->view->nav = $this->nav;
        
        if($this->infoLista["tipolista"]=="F") {
            $this->view->placeholder("titulo")->set("Gestor de Características");
            $this->titulo_nombre = "Característica :";
            $this->titulo_tabs = array("Características asignadas", "Banco de características");
        }
        $this->view->titulo_nombre = $this->titulo_nombre;
        
        $this->tabs = new App_Util_Tabs();
		$this->tabs->agregar_vista($this->titulo_tabs[0], "/autoevaluacion/preguntas/asignadas");
		$this->tabs->agregar_vista($this->titulo_tabs[1], "/autoevaluacion/preguntas/banco");
		$this->view->tabs = $this->tabs;
		$this->view->titulo_tabs = $this->titulo_tabs;
    }
    
    public function indexAction() {
        $this->_forward("asignadas");
    }
    
    public function dataAction() {
    	if($this->hasParam("codelementolista")) {
    	    $detalleLista = new Autoevaluacion_Model_DetalleLista();
    	    
    	    if($this->hasParam("asignarcaracteristica")) {
    	        $this->view->codelementolista = $this->getParam("codelementolista");
    	        if($this->infoLista["tipolista"] == "C" && !empty($this->infoLista["codlistafactores"])) {
    	            $this->view->datos = $detalleLista->getSecciones($this->infoLista["codlistafactores"]);
    	        }
    	        
    	        $this->_helper->layout()->disableLayout();
    	        $this->render("asignarcaracteristicas.ajax");
    	        
    	    } else {
        	    $codelementolista = $this->getParam("codelementolista");
        	    $datos = $detalleLista->getElemento($codelementolista, false);
        	    $this->_helper->json($datos);
    	    }
    	}
    }

    public function asignadasAction() {
        $this->tabs->actual($this->titulo_tabs[0]);
        
        $detalleLista = new Autoevaluacion_Model_DetalleLista();
        $form = new Autoevaluacion_Form_Elemento();
        $form->setAction($this->view->baseUrl("/autoevaluacion/preguntas/asignadas"));
        $form->removeElement("btnSubmitAsig");
        $form->getElement("btnSubmit")->setDecorators($form->_buttonDecorators);
        $form->getElement("texto")->setLabel($this->titulo_nombre);
        
		if($this->getRequest()->isPost() && $form->isValid($this->getRequest()->getPost())) {
    	    //Zend_Debug::dump($form->getValues());
    	    try {
                $codelemento = $detalleLista->updateTextoElemento($form->getValue("codelementolista"), $form->getValue("texto"));
                $this->view->priorityMessenger("Los datos se han guardado correctamente.", "success");
                $form->reset();
                
            } catch(Exception $e) {
                $this->view->priorityMessenger($e->getMessage(), "error");
            }
    	}
        
		$this->view->form = $form;
        $this->view->datos = $detalleLista->getElementosAsignados($this->infoSeccion["codseccionlista"], false, ($this->infoLista["tipolista"]=="C"));
        //Zend_Debug::dump($this->view->datos);
    }
    
    public function bancoAction() {
        $this->tabs->actual($this->titulo_tabs[1]);
        
		$detalleLista = new Autoevaluacion_Model_DetalleLista();
		
		$form = new Autoevaluacion_Form_Elemento();
    	$form->setAction($this->view->baseUrl("/autoevaluacion/preguntas/banco"));
    	$form->getElement("texto")->setLabel($this->titulo_nombre);
    	if($this->infoLista["tipolista"]=="F") {
    	    $form->removeElement("tipopregunta");
    	}
    	
    	if($this->getRequest()->isGet()) {
			if ($this->hasParam("modificar")) {
				$codelementolista = $this->getParam("modificar");
				$form->getElement("btnSubmit")->setLabel("Modificar");
				$form->removeElement("btnSubmitAsig");
				$form->getElement("btnSubmit")->setDecorators($form->_buttonDecorators);
				$array_datos = $detalleLista->getElemento($codelementolista, true);
			}
			if ($this->hasParam("eliminar")) {
				$codelementolista = $this->getParam("eliminar");
				try {
					$detalleLista->eliminarElemento($codelementolista);
					$this->view->priorityMessenger("El elemento se ha eliminado", "success");
				} catch (Exception $e) {
					$this->view->priorityMessenger($e->getMessage(), "error");
				}
			}
			
		} elseif($this->getRequest()->isPost() && $form->isValid($this->getRequest()->getPost())) {
    	    //Zend_Debug::dump($this->getRequest()->getPost());
    	    try {
    	        $form->getElement("tipolista")->setValue($this->infoLista["tipolista"]);
    	        $datos = $form->getValues();
    	        
                $opciones = $this->getParam("opcion-text");
   	            $pesos = $this->getParam("opcion-peso");
   	            $codigos = $this->getParam("opcion-codigo");
                $codelemento = $detalleLista->guardarElementoBanco($datos, $opciones, $pesos, $codigos);
   	            
                $this->view->priorityMessenger("Los datos se han guardado correctamente.", "success");
                if(strpos($form->getValue("btnSubmitAsig"), "asignar") !== false) {
                    $detalleLista->asignarElementoSeccion($codelemento, $this->infoSeccion["codseccionlista"]);
                    $form->reset();
                    $this->view->priorityMessenger("El elemento ha sido asignado", "success");
                }
                //$this->_helper->redirector("banco");
                
            } catch(Exception $e) {
                $this->view->priorityMessenger($e->getMessage(), "error");
            }
    	}
    	$array_datos["elementocna"] = "S";
    	$array_datos["codinstitucion"] = NULL;
		if (App_User::getCodigoPadreRol()==Roles_Model_Roles::CODPADRE_SEDE && $this->infoLista["tipolista"]=="F"){
		    $array_datos["codinstitucion"] = App_User::getCodigoSede();
		    $array_datos["elementocna"] = "N";
		}
        $form->populate($array_datos);
        $this->view->elementolista = $array_datos;
    	$this->view->form = $form;
    	$this->view->datos = $detalleLista->getElementosBanco($this->infoLista["tipolista"], $this->infoLista["codlista"],$array_datos["codinstitucion"]);
    }
    
    public function elementosasignarAction() {
		$seleccionados = $this->_getParam("seleccionados", array());
		if(count($seleccionados)==0) {
			$this->view->priorityMessenger("Debe seleccionar por lo menos un registro", "warning");
			$this->_helper->_redirector("banco");
		}
		try {
			$detalleLista = new Autoevaluacion_Model_DetalleLista();
			$detalleLista->asignarArrayElementoSeccion($seleccionados, $this->infoSeccion["codseccionlista"]);
			$this->view->priorityMessenger("Los elementos se han asignado correctamente", "success");
			
		} catch (Exception $e) {
			$this->view->priorityMessenger($e->getMessage(), "error");
		}
		$this->_helper->_redirector("banco");
	}
  
    public function elementosremoverAction() {
		$seleccionados = $this->_getParam("seleccionados", array());
		if(count($seleccionados)==0) {
			$this->view->priorityMessenger("Debe seleccionar por lo menos un registro", "warning");
			$this->_helper->_redirector("asignadas");
		}
		try {
			$detalleLista = new Autoevaluacion_Model_DetalleLista();
			$detalleLista->removerArrayElementoSeccion($seleccionados, $this->infoSeccion["codseccionlista"]);
			$this->view->priorityMessenger("Los elementos se han removido correctamente", "success");
			
		} catch (Exception $e) {
			$this->view->priorityMessenger($e->getMessage(), "error");
		}
		$this->_helper->_redirector("asignadas");
	}

	public function asignarcaracteristicasAction() {
   	        $this->_helper->layout()->disableLayout();

   	        $detalleLista = new Autoevaluacion_Model_DetalleLista();
    	    
    	    if($this->getRequest()->isGet() && $this->hasParam("codelementolista")) {
    	        $this->view->codelementolista = $this->getParam("codelementolista");
    	        if($this->infoLista["tipolista"] == "C" && !empty($this->infoLista["codlistafactores"])) {
    	            $this->view->datos = $detalleLista->getSecciones($this->infoLista["codlistafactores"]);
    	            $datos_asignadas = $detalleLista->getCaracteristicasAsignadas($this->view->codelementolista, $this->infoSeccion["codseccionlista"]);
    	            $asignadas = array();
    	            for($i=0; $i < count($datos_asignadas); $i++) {
    	                $asignadas[] = $datos_asignadas[$i]["codcaracteristica"];
    	            }
    	            $this->view->asignadas = $asignadas;
    	            //Zend_Debug::dump($this->view->asignadas);
    	        }
    	        //$this->render("asignarcaracteristicas.ajax");
    	    }
    	    if($this->getRequest()->isPost()) {
    	        $caracteristicas = $this->getParam("caracteristicas", array());
    	        $codelementolista = $this->getParam("codelementolista");
    	        try {
        			$detalleLista->asignarArrayCaracteristicas($caracteristicas, $codelementolista, $this->infoSeccion["codseccionlista"]);
        			$this->view->priorityMessenger("La asignación de características ha sido exitosa.", "success");
        			
        		} catch (Exception $e) {
        			$this->view->priorityMessenger($e->getMessage(), "error");
        		}
        		$this->_helper->_redirector("asignadas");
    	    }
	}
  
}//fin de la clase

